#!/bin/bash
# 创建项目目录结构
mkdir -p student_management/include    # 存储头文件
mkdir -p student_management/src        # 存储源文件
mkdir -p student_management/data       # 存储数据文件
mkdir -p student_management/bin        # 存储可执行文件
mkdir -p student_management/obj        # 存储对象文件
mkdir -p student_management/img        # 存储图片
mkdir -p student_management/log        # 存储日志文件

# 创建头文件并添加防止重复编译的宏
create_header() {
    local header_file=$1
    local header_guard=$(basename $header_file | tr '[:lower:]' '[:upper:]' | tr '.' '_')
    echo "#ifndef __${header_guard}__" > $header_file
    echo "#define __${header_guard}__" >> $header_file
    echo "" >> $header_file
    echo "// 声明函数" >> $header_file
    echo "" >> $header_file
    echo "#endif // __${header_guard}__" >> $header_file
}

# 创建头文件
create_header "student_management/include/student.h"    # 学生相关结构体和函数声明的头文件
create_header "student_management/include/list.h"       # 链表操作相关函数声明的头文件
create_header "student_management/include/utils.h"      # 公用工具函数声明的头文件

# 创建源文件
touch student_management/src/main.c                     # 主程序入口文件
touch student_management/src/student.c                  # 学生功能实现的源文件
touch student_management/src/list.c                     # 链表操作实现的源文件
touch student_management/src/utils.c                    # 公用工具函数实现的源文件

# 创建项目说明文档
touch student_management/README.md                      # 项目说明文档

# 创建数据文件
touch student_management/data/students.txt               # 学生信息文件

# 在每个 .c 文件中插入 #include "include/head.h"
add_include_to_c() {
    local c_file=$1
    echo '#include "include/head.h"' | cat - $c_file > temp && mv temp $c_file
}

# 在 main.c 中添加内容
cat > student_management/src/main.c <<EOL
#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("Welcome to Student Management System!\n");
    return 0;
}
EOL

# 对每个 .c 文件应用
add_include_to_c "student_management/src/main.c"
add_include_to_c "student_management/src/student.c"
add_include_to_c "student_management/src/list.c"
add_include_to_c "student_management/src/utils.c"

# 创建并写入 head.h 文件
cat > student_management/include/head.h <<EOL
#ifndef __HEAD_H__
#define __HEAD_H__

// 导入项目头文件
#include "student.h"
#include "list.h"
#include "utils.h"

// 定义宏定义
#define LOG_FILE "log/error.log"                    // 报错日志文件
#define STUDENTS_FILE "data/students.txt"           // 学生信息文件
#endif
EOL